(deftemplate persoana
    (slot nume)
    (slot sex)
    (slot parinte) ;la Ionel -> Maria
    (slot partener) ; la nemo e -> null    
    )

(assert (persoana) (nume Nemo)(sex M) (parinte Hans) (partener null))
(assert (persoana) (nume Hans)(sex M) (parinte null) (partener Armando))
(assert (persoana) (nume Armando)(sex M) (parinte Veta) (partener Hans))
(assert (persoana) (nume Ionel)(sex M) (parinte Maria) (partener Oana))
(assert (persoana) (nume Oana)(sex F) (parinte Maria) (partener Ionel))
(assert (persoana) (nume George)(sex M) (parinte Veta) (partener Maria))
(assert (persoana) (nume Maria)(sex F) (parinte Alberta) (partener George))
(assert (persoana) (nume Petru)(sex M) (parinte null) (partener Veta))
(assert (persoana) (nume Veta)(sex F) (parinte null) (partener Petru))
(assert (persoana) (nume Vanesa)(sex F) (parinte Mirela) (partener null))
(assert (persoana) (nume Vasilica)(sex F) (parinte Alberta) (partener Mirela))
(assert (persoana) (nume Mirela)(sex F) (parinte null) (partener Vasilica))
(assert (persoana) (nume Teodor)(sex M) (parinte null) (partener Alberta))
(assert (persoana) (nume Alberta)(sex F) (parinte null) (partener Todor))

(defrule mama1
    (persoana (nume ?nc) (parinte ?np))
    (persoana (nume ?np) (sex F))
    =>
    (printout t "Persoana " ?nc " are mama " ?np crlf)
    )

(defrule mama2
    (persoana (nume ?nc) (parinte ?np))
    (persoana (nume ?np) (partener ?npp))
    (persoana (nume ?npp) (sex F))
    =>
     (printout t "Persoana " ?nc " are mama " ?npp crlf)
    )

(run)